#ifndef vtkYorunge_h__
#define vtkYorunge_h__

#include "Pozisyon.h"


// VTK
#include <vtkSmartPointer.h>
#include <vtkNew.h>
#include <vtkVersion.h>
#include <vtkUnsignedCharArray.h>
#include <vtkFloatArray.h>
#include <vtkLookupTable.h>
#include <vtkActor.h>
#include <vtkActorCollection.h>
#include <vtkProperty.h>

/** 
 * \class vtkYorunge
 * \ingroup Gosterim
 * \brief Bir yorunge icin gerekli olan VTK data yapilarini birlestiren ana siniftir.
 * \author Mehmet Yigitsoy
 * \date $Date: 2013/01/03 11:23:00 $
 */
class vtkYorunge

{
public:
	/**
	 * \brief 
	 * \returns 
	 **/
	vtkYorunge(YorungeId id);


	/**
	 * \brief 
	 * \returns 
	 **/
	virtual ~vtkYorunge();


	/**
	 * \brief Yeni bir posisyon eklemek icin kullanilir.
	 * \param pozisyon
	 * \returns void
	 **/
	virtual void pozisyonEkle(const Pozisyon& pozisyon) = 0;


	const YorungeId Id() const { return m_id; };

	/**
	 * \brief Objenin render edilebilmesi icin aktorlerin vtkRenderer'a eklenmesi gerekiyor.
	 * \returns vtkSmartPointer<vtkActorCollection>
	 **/
	vtkSmartPointer<vtkActorCollection> Actors() const { return m_actors; };
	
	/**
	 * \brief 
	 * \returns vtkSmartPointer<vtkFloatArray>
	 **/
	vtkSmartPointer<vtkFloatArray>	Colors() const { return m_color; };
	
	/**
	 * \brief 
	 * \returns vtkSmartPointer<vtkLookupTable>
	 **/
	vtkSmartPointer<vtkLookupTable>	Lut() const { return m_lut; };
	
protected:
	/**
	 * \brief 
	 * \param actor
	 * \returns void
	 **/
	void aktorEkle(vtkActor* actor) { m_actors->AddItem(actor); };

private:
	vtkSmartPointer<vtkActorCollection>		m_actors;					///< Renderer'da polydata'yi temsil edecek aktorler.
	vtkSmartPointer<vtkFloatArray>			m_color;					///< Mapper'a saglayacagimiz renk listesi.
	vtkSmartPointer<vtkLookupTable>			m_lut;						///< Renkleri olusturmak icin gerekli tablo.
	YorungeId								m_id;						///< Bu yorungenin Id'si.
};

typedef vtkYorunge* VtkYorungePtr;


#endif // vtkYorunge_h__